热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

独家|一文读懂PySpark数据框(附实例)

本文约1900字,建议阅读8分钟。本文中我们将探讨数据框的概念,以及它们如何与PySpark一起帮助数据分析员来解读大数据集。数据框是现代行业的流行词。人们往往会在一些流行的数据分

本文约1900字,建议阅读8分钟

本文中我们将探讨数据框的概念,以及它们如何与PySpark一起帮助数据分析员来解读大数据集。

数据框是现代行业的流行词。人们往往会在一些流行的数据分析语言中用到它,如Python、Scala、以及R。 那么,为什么每个人都经常用到它呢?让我们通过PySpark数据框教程来看看原因。在本文中,我将讨论以下话题:

  • 什么是数据框?
  • 为什么我们需要数据框?
  • 数据框的特点
  • PySpark数据框的数据源
  • 创建数据框
  • PySpark数据框实例:国际足联世界杯、超级英雄

什么是数据框?

数据框广义上是一种数据结构,本质上是一种表格。它是多行结构,每一行又包含了多个观察项。同一行可以包含多种类型的数据格式(异质性),而同一列只能是同种类型的数据(同质性)。数据框通常除了数据本身还包含定义数据的元数据;比如,列和行的名字。

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

我们可以说数据框不是别的,就只是一种类似于SQL表或电子表格的二维数据结构。接下来让我们继续理解到底为什么需要PySpark数据框。

为什么我们需要数据框?

1. 处理结构化和半结构化数据

《独家 | 一文读懂PySpark数据框 (附实例)》

数据框被设计出来就是用来处理大批量的结构化或半结构化的数据。各观察项在Spark数据框中被安排在各命名列下,这样的设计帮助Apache Spark了解数据框的结构,同时也帮助Spark优化数据框的查询算法。它还可以处理PB量级的数据。

2. 大卸八块

《独家 | 一文读懂PySpark数据框 (附实例)》

数据框的应用编程接口(API)支持对数据“大卸八块”的方法,包括通过名字或位置“查询”行、列和单元格,过滤行,等等。统计数据通常都是很凌乱复杂同时又有很多缺失或错误的值和超出常规范围的数据。因此数据框的一个极其重要的特点就是直观地管理缺失数据。

3. 数据源

《独家 | 一文读懂PySpark数据框 (附实例)》

数据框支持各种各样地数据格式和数据源,这一点我们将在PySpark数据框教程的后继内容中做深入的研究。它们可以从不同类的数据源中导入数据。

4. 多语言支持

《独家 | 一文读懂PySpark数据框 (附实例)》

它为不同的程序语言提供了API支持,如Python、R、Scala、Java,如此一来,它将很容易地被不同编程背景的人们使用。

数据框的特点

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

  • 数据框实际上是分布式的,这使得它成为一种具有容错能力和高可用性的数据结构。
  • 惰性求值是一种计算策略,只有在使用值的时候才对表达式进行计算,避免了重复计算。Spark的惰性求值意味着其执行只能被某种行为被触发。在Spark中,惰性求值在数据转换发生时。
  • 数据框实际上是不可变的。由于不可变,意味着它作为对象一旦被创建其状态就不能被改变。但是我们可以应用某些转换方法来转换它的值,如对RDD(Resilient Distributed Dataset)的转换。

数据框的数据源

在PySpark中有多种方法可以创建数据框:

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

可以从任一CSV、JSON、XML,或Parquet文件中加载数据。还可以通过已有的RDD或任何其它数据库创建数据,如HiveCassandra。它还可以从HDFS或本地文件系统中加载数据。

创建数据框

让我们继续这个PySpark数据框教程去了解怎样创建数据框。

我们将创建 Employee 和 Department 实例:

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

接下来,让我们通过Employee和Departments创建一个DepartmentWithEmployees实例。

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

让我们用这些行来创建数据框对象:

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

PySpark数据框实例1:国际足联世界杯数据集

这里我们采用了国际足联世界杯参赛者的数据集。我们将会以CSV文件格式加载这个数据源到一个数据框对象中,然后我们将学习可以使用在这个数据框上的不同的数据转换方法。

《独家 | 一文读懂PySpark数据框 (附实例)》

1. 从CSV文件中读取数据

让我们从一个CSV文件中加载数据。这里我们会用到spark.read.csv方法来将数据加载到一个DataFrame对象(fifa_df)中。代码如下:

spark.read.format[csv/json]

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

2. 数据框结构

来看一下结构,亦即这个数据框对象的数据结构,我们将用到printSchema方法。这个方法将返回给我们这个数据框对象中的不同的列信息,包括每列的数据类型和其可为空值的限制条件。

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》

3. 列名和个数(行和列)

当我们想看一下这个数据框对象的各列名、行数或列数时,我们用以下方法:

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

4. 描述指定列

如果我们要看一下数据框中某指定列的概要信息,我们会用describe方法。这个方法会提供我们指定列的统计概要信息,如果没有指定列名,它会提供这个数据框对象的统计信息。

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》

5. 查询多列

如果我们要从数据框中查询多个指定列,我们可以用select方法。

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》

6. 查询不重复的多列组合

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》

7. 过滤数据

为了过滤数据,根据指定的条件,我们使用filter命令。 这里我们的条件是Match ID等于1096,同时我们还要计算有多少记录或行被筛选出来。

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

8. 过滤数据(多参数)

我们可以基于多个条件(AND或OR语法)筛选我们的数据:

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

9. 数据排序 (OrderBy)

我们使用OrderBy方法排序数据。Spark默认升序排列,但是我们也可以改变它成降序排列。

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

PySpark数据框实例2:超级英雄数据集

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

1. 加载数据

这里我们将用与上一个例子同样的方法加载数据:

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

2. 筛选数据

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

3. 分组数据

GroupBy 被用于基于指定列的数据框的分组。这里,我们将要基于Race列对数据框进行分组,然后计算各分组的行数(使用count方法),如此我们可以找出某个特定种族的记录数。

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》

4. 执行SQL查询

我们还可以直接将SQL查询语句传递给数据框,为此我们需要通过使用registerTempTable方法从数据框上创建一张表,然后再使用sqlContext.sql()来传递SQL查询语句。

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》
《独家 | 一文读懂PySpark数据框 (附实例)》

《独家 | 一文读懂PySpark数据框 (附实例)》

到这里,我们的PySpark数据框教程就结束了。

我希望在这个PySpark数据框教程中,你们对PySpark数据框是什么已经有了大概的了解,并知道了为什么它会在行业中被使用以及它的特点。恭喜,你不再是数据框的新手啦!

原文标题:PySpark DataFrame Tutorial: Introduction to DataFrames

原文链接:https://dzone.com/articles/pyspark-dataframe-tutorial-introduction-to-datafra

作者:Kislay Keshari

翻译:季洋


推荐阅读
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 《Spark核心技术与高级应用》——1.2节Spark的重要扩展
    本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第1章,第1.2节Spark的重要扩展,作者于俊向海代其锋马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看1. ... [详细]
  • 伸缩性|发生_分布式文件系统设计,该从哪些方面考虑?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了分布式文件系统设计,该从哪些方面考虑?相关的知识,希望对你有一定的参考价值。点击上方关注“ ... [详细]
  • 开发笔记:Spark Java API 之 CountVectorizer
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了SparkJavaAPI之CountVectorizer相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • Flink使用java实现读取csv文件简单实例首先我们来看官方文档中给出的几种方法:首先我们来看官方文档中给出的几种方法:第一种:Da ... [详细]
  • 简介数组、CSV、表格、东西将一个数组转化为逗号为支解符的字符串(CSV)即表格数据。该源码来自于https:30secondsofcode.orgconstarrayToCSV( ... [详细]
  • 1.淘宝模拟登录2.天猫商品数据爬虫3.爬取淘宝我已购买的宝贝数据4.每天不同时间段通过微信发消息提醒女友5.爬取5K分辨率超清唯美壁纸6.爬取豆瓣排行榜电影数据(含GUI界面版) ... [详细]
  • csv转为矩阵 python_Python可视化 | Seaborn5分钟入门(六)——heatmap热力图
    Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API ... [详细]
author-avatar
化合价steuart_968
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有